#pragma once
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <openssl/ssl.h>
#include <openssl/err.h>


class TLSConnection {
public:
    TLSConnection(SSL_CTX* ctx, int conn_fd);
    ~TLSConnection();

    bool doHandshake(bool isServer);

    /* 基础读写 */
    int  read(char* buf, size_t len);
    int  write(const char* buf, size_t len);

    /* SSL适配读写*/
    

    /**
     * read 返回读到的字节数 >0，0表示连接关闭，-1表示出错
     * err_no 作为输出参数，表示错误码，只有返回-1时有效
     */
    int read(char* buf, size_t len, int* err_no);

    /**
     * 0 表示写入字节数 ，=0 极少见，通常可认为连接关闭 ，-1 表示错误
     * err_no 输出具体错误码（EAGAIN 或其他） 只有返回-1时生效
     */
    int write(const char* buf, size_t len, int* err_no);
private:
    SSL* ssl_;
    int  fd_;
};
